package org.jeecg.modules.scm.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.flow.query.TaskQuery;
import org.jeecg.modules.scm.dto.EditReceivablesDto;
import org.jeecg.modules.scm.entity.ScmReceivables;
import org.jeecg.modules.scm.vo.InvoiceRelevancyVo;
import org.jeecg.modules.scm.vo.ReceivablesTaskVo;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * @Description: scm_receivables
 * @Author: jeecg-boot
 * @Date: 2021-10-25
 * @Version: V1.0
 */
public interface IScmReceivablesService extends IService<ScmReceivables> {

    /**
     * 编辑应收账款
     *
     * @param dto
     * @return
     */
    boolean updateByDto(EditReceivablesDto dto);

    /**
     * 添加应收账款
     *
     * @param dto
     * @return
     */
    Integer saveByDto(EditReceivablesDto dto);

    /**
     * 上传贸易合同
     *
     * @param file 贸易合同附件
     * @param id   应收账款ID
     */
    String uploadContract(MultipartFile file, String no, Integer id);

    /**
     * 上传其他贸易合同
     *
     * @param file
     * @param id
     * @return
     */

    String uploadAccessory(MultipartFile file, Integer id);

    /**
     * 批量关联发票
     *
     * @param id
     * @param invoiceNos
     */
    Result<InvoiceRelevancyVo> relevancyInvoice(Integer id, List<String> invoiceNos);

    /**
     * 解除关联发票
     *
     * @param id
     * @param invoiceNos
     */
    void disassociation(Integer id, List<String> invoiceNos);

    /**
     * 申请生成云联单
     *
     * @param id 应收账款Id
     * @return
     */
    String applyCloudChain(Integer id);

    /**
     * 查询当前登录用户的任务
     *
     * @param query
     * @return
     */
    List<ReceivablesTaskVo> findTaskList(TaskQuery query);

    /**
     * 修改状态
     *
     * @param status
     * @param receivablesId
     * @return
     */
    boolean updateStatusById(Integer status, Integer receivablesId);

    /**
     * 删除贸易合同
     *
     * @param id
     * @return
     */
    Boolean deleteContract(Integer id);

    /**
     * 记录是否存在
     *
     * @param id
     * @return
     */
    Boolean existsById(Integer id);
}
